package com.myworkspace.standard.common.result;

import com.myworkspace.standard.common.utils.CustomUtils;
import com.myworkspace.standard.common.JackSonJsonConvert;
import net.sf.json.JSONObject;

import java.io.IOException;

/**
 * 封装向前端返回的数据
 */
public class Result {
    private Integer code;//状态码 0：失败，1：成功
    private String massege;//消息 提示信息
    private Object result;//数据对象

    /**
     * 无参构造器
     */
    public Result() {
        super();
    }

    /**
     * 只返回状态，状态码，消息
     *
     * @param code
     * @param massege
     */
    public Result(Integer code, String massege) {
        super();
        this.code = code;
        this.massege = massege;
    }

    /**
     * 只返回状态，状态码，数据对象
     *
     * @param code
     */
    public Result(Integer code, Object result) {
        super();
        this.code = code;
        this.result = result;
    }

    /**
     * 返回全部信息即状态，状态码，消息，数据对象
     *
     * @param code
     * @param massege
     * @param result
     */
    public Result(Integer code, String massege, Object result) {
        super();
        this.code = code;
        this.massege = massege;
        this.result = result;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMassege() {
        return massege;
    }

    public void setMassege(String massege) {
        this.massege = massege;
    }

    public Object getResult() {
        return result;
    }

    public void setResult(Object result) {
        this.result = result;
    }

    public String toString() {
        JSONObject  obj = new JSONObject();
        obj.put("code", this.code);
        obj.put("msg", this.massege);
        obj.put("data", this.result); //
        try {
            obj = JackSonJsonConvert.jsonStrToObject(filterResult(obj), JSONObject.class);
            return obj.toString();
        } catch (IOException e) {
            return obj.toString();
        }
    }

    /**
     * 过滤最终的结果集（将id的value值改为字符串，将http链接地址改为https）
     *
     * @param object
     * @return
     */
    public String filterResult(JSONObject object) {
        object.replaceAll((key, value) -> {
            if (key.toString().contains("id")) {
                return CustomUtils.Nvl(value.toString(), "");
            } else {
                if (CustomUtils.isImage(value.toString())) {
                    return value.toString().replaceAll("http://", "https://");
                } else {
                    return value;
                }
            }
        });
        return object.toString();
    }
}
